package com.dwy2002.pojo.po.order;

import com.dwy2002.pojo.po.base.BaseDeleted;
import com.fasterxml.jackson.databind.annotation.JsonSerialize;
import com.fasterxml.jackson.databind.ser.std.ToStringSerializer;
import lombok.Data;
import lombok.EqualsAndHashCode;
import lombok.Getter;

import java.math.BigDecimal;

/**
 * 支付记录表实体类
 *
 * @author 杜伟毅
 * @version 1.0
 * @since 2025/03/06
 */
@EqualsAndHashCode(callSuper = true)
@Data
public class PaymentRecords extends BaseDeleted {
    /**
     * 关联订单ID
     */
    private String orderId;
    /**
     * 实际支付金额
     */
    @JsonSerialize(using = ToStringSerializer.class) // 将 BigDecimal 序列化为字符串
    private BigDecimal amount;
    /**
     * 支付方式
     */
    private String paymentMethod;
    /**
     * 第三方支付流水号
     */
    private String transactionId;
    /**
     * 支付结果：1-成功 2-失败 3-退款中 4-已退款
     */
    private Integer status;
    /**
     * 支付账户信息（如支付宝账号）
     */
    private String payerInfo;
    /**
     * 是否可退款：0-不可退 1-可退
     */
    private Integer isRefundable;

    @Getter
    public enum StatusEnum {
        SUCCESS(1, "成功"),
        FAIL(2, "失败"),
        REFUNDING(3, "退款中"),
        REFUNDED(4, "已退款");

        private final int code;
        private final String description;

        StatusEnum(int code, String description) {
            this.code = code;
            this.description = description;
        }

        /**
         * 检测是否是合法类型
         *
         * @param code 类型数字
         * @return 对函数返回值的描述
         * @author 杜伟毅
         * @since 2025/3/14 0014 17:10
         */
        public static boolean isValidStatusEnum(int code) {
            for (StatusEnum status : values()) {
                if (status.code == code) {
                    return true;
                }
            }
            return false;
        }
    }
}
